{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 模拟梯度下降法"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 梯度下降法的封装和实现"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-1.  , -0.95, -0.9 , -0.85, -0.8 , -0.75, -0.7 , -0.65, -0.6 ,\n",
       "       -0.55, -0.5 , -0.45, -0.4 , -0.35, -0.3 , -0.25, -0.2 , -0.15,\n",
       "       -0.1 , -0.05,  0.  ,  0.05,  0.1 ,  0.15,  0.2 ,  0.25,  0.3 ,\n",
       "        0.35,  0.4 ,  0.45,  0.5 ,  0.55,  0.6 ,  0.65,  0.7 ,  0.75,\n",
       "        0.8 ,  0.85,  0.9 ,  0.95,  1.  ,  1.05,  1.1 ,  1.15,  1.2 ,\n",
       "        1.25,  1.3 ,  1.35,  1.4 ,  1.45,  1.5 ,  1.55,  1.6 ,  1.65,\n",
       "        1.7 ,  1.75,  1.8 ,  1.85,  1.9 ,  1.95,  2.  ,  2.05,  2.1 ,\n",
       "        2.15,  2.2 ,  2.25,  2.3 ,  2.35,  2.4 ,  2.45,  2.5 ,  2.55,\n",
       "        2.6 ,  2.65,  2.7 ,  2.75,  2.8 ,  2.85,  2.9 ,  2.95,  3.  ,\n",
       "        3.05,  3.1 ,  3.15,  3.2 ,  3.25,  3.3 ,  3.35,  3.4 ,  3.45,\n",
       "        3.5 ,  3.55,  3.6 ,  3.65,  3.7 ,  3.75,  3.8 ,  3.85,  3.9 ,\n",
       "        3.95,  4.  ,  4.05,  4.1 ,  4.15,  4.2 ,  4.25,  4.3 ,  4.35,\n",
       "        4.4 ,  4.45,  4.5 ,  4.55,  4.6 ,  4.65,  4.7 ,  4.75,  4.8 ,\n",
       "        4.85,  4.9 ,  4.95,  5.  ,  5.05,  5.1 ,  5.15,  5.2 ,  5.25,\n",
       "        5.3 ,  5.35,  5.4 ,  5.45,  5.5 ,  5.55,  5.6 ,  5.65,  5.7 ,\n",
       "        5.75,  5.8 ,  5.85,  5.9 ,  5.95,  6.  ])"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plot_x = np.linspace(-1, 6, 141) # [-1, 6]等间距取141个点\n",
    "plot_x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "plot_y = (plot_x - 2.5)**2 - 1 # 损失函数J"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(plot_x, plot_y)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# theta对应的导数\n",
    "def dJ(theta):\n",
    "    return 2*(theta - 2.5)\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# theta对应的损失函数\n",
    "def J(theta):\n",
    "    try:\n",
    "        return (theta - 2.5)**2 - 1\n",
    "    except:\n",
    "        return float(\"inf\") # 防止梯度下降法结果收敛不了"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "theta = 0.0\n",
    "eta = 0.1 # 学习率η\n",
    "epsilon = 1e-8 # 接近0的定义"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2.499891109642585\n",
      "-0.99999998814289\n"
     ]
    }
   ],
   "source": [
    "while True:\n",
    "    gradient = dJ(theta) # 获取导数变换值\n",
    "    last_theta = theta \n",
    "    theta = theta - eta * gradient # eta即η, theta即θ(指的是特征系数的取值，一个一维数组，不断变化使得J(θ)最小)\n",
    "    \n",
    "    # 比较差值是否越来越小.当变换接近于最小精度时，已经可以认为到达导数为0的点了\n",
    "    if(abs(J(theta) - J(last_theta)) < epsilon):\n",
    "        break\n",
    "        \n",
    "print(theta)\n",
    "print(J(theta))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "theta = 0.0\n",
    "theta_history = [theta]\n",
    "while True:\n",
    "    gradient = dJ(theta) # 求导\n",
    "    last_theta = theta \n",
    "    theta = theta - eta * gradient # -η*dJ\n",
    "    # 把每次的theta存储到数组中，方便下面进行绘图\n",
    "    theta_history.append(theta)\n",
    "    \n",
    "    # 比较损失函数的差值是否越来越小.当变化接近于最小精度时，已经可以认为到达导数为0的点了\n",
    "    if(abs(J(theta) - J(last_theta)) < epsilon):\n",
    "        break\n",
    "        \n",
    "plt.plot(plot_x, J(plot_x)) # 画出整个曲线\n",
    "plt.plot(np.array(theta_history), J(np.array(theta_history)), color = 'r', marker = '+') # 画出所有梯度下降法经过的点\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "46"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(theta_history) # 执行了46次，得到了导数为0的点"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "def gradient_descent(initial_theta,eta,epsilon=1e-8):\n",
    "    \"\"\"\n",
    "    梯度下降法的封装\n",
    "    \"\"\"\n",
    "    theta = initial_theta\n",
    "    theta_history = [initial_theta]\n",
    "    while True:\n",
    "        gradient = dJ(theta)\n",
    "        last_theta = theta \n",
    "        theta = theta - eta * gradient\n",
    "        # 把每次的theta存储到数组中，方便下面进行绘图\n",
    "        theta_history.append(theta)\n",
    "        # print(theta)\n",
    "        # 比较差值是否越来越小.当变换接近于最小经度时，已经可以人为到达导数为0的点了\n",
    "        if(abs(J(theta) - J(last_theta)) < epsilon):\n",
    "            print(\"累计查找的次数：\"+str(len(theta_history)))\n",
    "            plot_theta_history(theta_history)\n",
    "            break"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_theta_history(theta_history):\n",
    "    plt.plot(plot_x, J(plot_x))\n",
    "    plt.plot(np.array(theta_history), J(np.array(theta_history)), color = 'r', marker = '+')\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 下面分别对不同的η(即eta)进行测试，看下不同的η对收敛速度和收敛性的影响\n",
    "> 一般η初始取0.01比较好"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "累计查找的次数：22\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "eta = 0.8 # 分别自己试试0.1、0.01、0.001；0.8、、\n",
    "gradient_descent(0.,eta)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "累计查找的次数：46\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "eta = 0.1 # 分别自己试试0.1、0.01、0.001；0.8、、\n",
    "gradient_descent(0.,eta)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "累计查找的次数：424\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "eta = 0.01 # 分别自己试试0.1、0.01、0.001；0.8、、\n",
    "gradient_descent(0.,eta)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "累计查找的次数：3682\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXAAAAD4CAYAAAD1jb0+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nO3deXjU1b0G8PebPUAWIAsJSUgg7EsAI7uKgsUFtVZbcatYK21dqq1Xa3t7r3pvr/b2dnHtggpSQUEpVeqGimyiLGFfwhqyQxICWUjIMjPf+0dCi5hMllnO/Gbez/PwkEyGmfcJ8HI4v3POT1QVRERkPUGmAxARUfewwImILIoFTkRkUSxwIiKLYoETEVlUiDffLC4uTtPT0735lkRElrdt27aTqhp/4eNeLfD09HTk5OR48y2JiCxPRAraepxTKEREFsUCJyKyKBY4EZFFscCJiCyKBU5EZFEscCIii2KBExFZlCUK/P3dx7Fkc5vLIImIfFpJ1Vn8+sMDKK9tcPtrW6LAP9hzHL9ddRCNNrvpKEREXbJsaxH+sv4ommwOt7+2JQr8lotTcbq+Gav2lZmOQkTUaXaH4u2cIlwyOB4pvXu4/fUtUeDTMuOQ0jsSy7YWmo5CRNRp6w9V4Hh1A269ONUjr2+JAg8KEtySnYqNRypRUFlnOg4RUae8uaUQcb3CMGN4okde3xIFDgA3Z6cgSFrmk4iIfF15TQNWHyjHTeNTEBbimaq1TIEnxUTi8qEJeHtbMWx2918MICJyp+Xbi2F3KG7x0PQJYKECB4A5E9JQUduIzw6Um45CRNQuh0OxbGsRJmb0wcD4Xh57H0sV+OVD45EQFY6lnEYhIh+2Ka8SBZX1mDPBc6NvwGIFHhIchG9np2DtwXIcrz5rOg4RUZve3FqE6IgQXD0qyaPvY6kCB4BbstPgUODtnGLTUYiIvuZ0XRNW7T2Bb41PQURosEffy3IFnta3B6ZlxmHZ1iI4HGo6DhHRV6zYUYImu8OjFy/PsVyBA8CcCakoqTqLDUdOmo5CRPRPqoqlWwqRlRqL4UnRHn8/Sxb4lSMS0btHKJZu4c5MIvId2wtP43D5GY/tvLyQJQs8PCQYN41PwSf7y3DyTKPpOEREAIClW4rQIywYs7OSvfJ+lixwoGUaxeZQ/G0bL2YSkXm1Dc14b/dxXJ+VjF7hIV55T8sWeGZCFLIH9MayrUVQ5cVMIjLr3Z2lONtsx5wJaV57T8sWONCyMzPvZB025Z0yHYWIApiqYunWQgzrF4WslBivvW+HBS4iC0SkXET2nvdYHxH5REQOt/7c27Mx23bt6CRER4Twbj1EZNSu4mrsLanBrRPSICJee9/OjMBfA3DVBY89DmC1qg4GsLr1c6+LDAvGzRelYtW+E6io5cVMIjJj8aYC9AgLxrfG9/fq+3ZY4Kq6HsCFcxQ3AFjU+vEiAN90c65Ou31SGprtirdyeD4KEXlfVX0T/rGrFDeM7Y+oiFCvvnd358ATVfU4ALT+nNDeE0VknojkiEhORUVFN9+ufYPie2HKoL54Y3Mh7NyZSURetnxbMRptDtwxyXsXL8/x+EVMVZ2vqtmqmh0fH++R97hz0gCUVJ3FGh4zS0Re5HAolmwuxPi0WIxM9t7Fy3O6W+BlIpIEAK0/G23OmSMSkRAVjsW8mElEXvTF0UocO1mHOyYNMPL+3S3wlQDuav34LgDvuidO94QGB2HOhDSsO1SBwsp6k1GIKIAs3lSA3j1Ccc1ozx4b257OLCN8E8CXAIaKSLGI3APg1wCuFJHDAK5s/dyoWyekIkgES7ZwFE5EnneiugGf5JbhO9mpHj82tj0d7vdU1Vvb+dIMN2dxSVJMJGYOT8DbOcX46ZVDEB5i5htKRIHhzS0tCydum+j9i5fnWHon5oXumDQAp+qa8OGeE6ajEJEfa7Y7sHRrIS4bEo8BfXsay+FXBT51UBzS+/bA4k2cRiEiz1mdW4aymkZjFy/P8asCDwoS3DFpAHIKTiP3eI3pOETkp17fVIDkmAhcMazdLTBe4VcFDgA3X5SC8JAgjsKJyCPyKs5g45FK3DYxDcFB3jv3pC1+V+CxPcIwe0wy3tlRgtqGZtNxiMjPLNlciJAgwXe8dNcdZ/yuwAHgzskDUNdkxzs7SkxHISI/crbJjrdzijBrVD8kREWYjuOfBZ6VEoNR/aPx+qYC3uyBiNzmH7tKUdNgwx0TzV68PMcvC1xE8N3J6ThUdgZfHq00HYeI/ICqYuEX+RiaGIVJA/uYjgPATwscAK7PSkafnmFY+EW+6ShE5Ae2HDuF3OM1mDs13as3bXDGbws8IjQYt01Iw6e5ZSg6xfNRiMg1r32Rj9geofjmWO/etMEZvy1woGVnZpAIFnEUTkQuKD5dj1X7TmDOxWmIDPOdYzr8usD7xUTg6lH9sCynCHWNNtNxiMiiXt9UABHBnZN94+LlOX5d4ABw99QM1DbYsGJ7sekoRGRBZ5vsWLqlCLNGJqJ/bKTpOF/h9wU+Pi0WY1Ji8NoX+XDwlmtE1EV/31GC6rPNmDslw3SUr/H7AhcR3D01HUcr6vD5kZOm4xCRhagqXvviGEYmR+Pi9N6m43yN3xc4AFwzOglxvcKxcOMx01GIyEK+PFqJQ2VnMHeK7ywdPF9AFHh4SDBun5iGNQcrcOxknek4RGQRCzbmo2/PMFyXlWw6SpsCosAB4PZJaQgN5pJCIuqcwsp6rD5Qhtsmphm7ZVpHAqbAE6IiMHtMMt7OKeIphUTUob9+mY9gEdzuI+eetCVgChwA5k5JR12THcu3cUkhEbWvrtGGZTlFuHp0EvrFmD91sD0BVeBZqbEYnxaLRVxSSEROrNhejNoGG+6emm46ilMBVeAAMHdqBvIr6/HZgXLTUYjIBzkcLacOZqXEYFxqrOk4TgVcgV89qh+SYiLwyud5pqMQkQ9ac7AceRV1+N60DJ9cOni+gCvw0OAgfG9qBjblncLu4irTcYjIx8xfn4f+sZG4ZnSS6SgdcqnAReQnIrJPRPaKyJsi4ruz/eeZMyEVUeEheHkDN/YQ0b/sKqrC5mOncPfUdIQG+/74ttsJRaQ/gB8DyFbVUQCCAcxxVzBPiooIxa0T0/DBnuM8K5yI/unlDXmIigjBnAlppqN0iqv/xIQAiBSREAA9AJS6Hsk75k5JhwBYuDHfdBQi8gFFp+rxwZ7juG1CGnqFh5iO0yndLnBVLQHwWwCFAI4DqFbVjy98nojME5EcEcmpqKjoflI3S46NxHVZyVi6tRDV9dzYQxToFmw8hiARzPXxpYPnc2UKpTeAGwBkAEgG0FNE7rjweao6X1WzVTU7Pj6++0k94PuXZKC+yY43thSajkJEBlXXN2PZ1iJcn5WMpBjfOvPbGVemUGYCOKaqFaraDGAFgCnuieUdI5NjMC0zDgs3HkOTzWE6DhEZsmRLAeqb7Pj+JQNNR+kSVwq8EMAkEekhLYslZwDIdU8s77n30oEor23Eyl2Wmb4nIjdqtNnx2sZ8XDI4DiOSo03H6RJX5sA3A1gOYDuAPa2vNd9Nubzm0sFxGJoYhVc25EGV2+uJAs3KnaUor23EvRYbfQMurkJR1SdUdZiqjlLVO1W10V3BvEVEcO+lA3HgRC02HOYde4gCiari5Q15GNYvCpcMjjMdp8t8f6W6F1yflYzE6HC8vIHb64kCybpDFThUdgb3XjLQ57fNt4UFDiAsJAhzp2Rgw+GT2F9aYzoOEXnJyxvykBgd7rN33OkIC7zVbRPT0DMsmKNwogCxt6QaG49U4u6pGQgLsWYVWjO1B8REhuKWi9Owclcpt9cTBYA/rzuKXuEhuNUi2+bbwgI/z72XZiBIwFE4kZ/LqziD9/ccxx2TBiAmMtR0nG5jgZ8nKSYSN41PwdKtRSivbTAdh4g85C/r8hAWHIR7pmWYjuISFvgFfnDZINjsDiz4PN90FCLygNKqs1ixoxi3XJyK+Khw03FcwgK/QEZcT1w7JhmLNxXwkCsiP/TyhjyoAvMutd7GnQuxwNtw3/RBONNow1+/zDcdhYjcqPJMI97cUogbxvZHSu8epuO4jAXehuFJ0ZgxLAELNh5DfZPNdBwicpOFG/PRaHPgR9OtP/oGWODtuu/yTJyub8abW4pMRyEiN6hpaMaiL/Nx1ch+yEyIMh3HLVjg7bhoQG9MGtgH89cfRaPNbjoOEblo8aYC1DbYcP/lmaajuA0L3In7L89EWU0jVmwvMR2FiFxwtsmOVzccw2VD4jGqf4zpOG7DAndiWmYcxqTE4M/rjsJm5w0fiKxq2dZCVNY1+dXoG2CBOyUiuG96Jgoq6/H+nuOm4xBRNzTZHJi/Pg8Xp/fGhIw+puO4FQu8A98YkYjMhF7445qjcDh4wwciq3lnZwlKqxtwn5+NvgEWeIeCggT3TR+Eg2W1WH2g3HQcIuoCu0Px57VHMSIpGtOH+NZN1d2BBd4J12UlY0DfHnhu9SHedo3IQlbuKkHeyTo8eEWmJW/Y0BEWeCeEBgfhgcszsbekBp/sLzMdh4g6wWZ34PnVRzCsXxRmjexnOo5HsMA76cZx/ZHetwee/fQwR+FEFvDuzlIcO1mHh2cOQVCQ/42+ARZ4p4UEB+HBKwZj//EarNrHUTiRL7PZHXjhs8MYkRSNWSMTTcfxGBZ4F9wwNhkZcT3x7KeHuCKFyIe9s7MU+ZX1eHjmYL+c+z6HBd4FLaPwTBw4UYtV+06YjkNEbTg3+h6ZHI0rR/jv6BtwscBFJFZElovIARHJFZHJ7grmq67PSsbAuJ549tPDHIUT+aAVO0pQUFmPh2cO8evRN+D6CPw5AB+p6jAAWQByXY/k20KCg/DjGYNxsKwWH+7lKJzIlzS3jr5H94/BzOEJpuN4XLcLXESiAVwK4FUAUNUmVa1yVzBfdl1WMgbF98RzqzkXTuRLVmwvRtGps34/932OKyPwgQAqACwUkR0i8oqI9LzwSSIyT0RyRCSnoqLChbfzHcFBgh/PGIxDZWd4RgqRj2iyOfDCZ0eQlRKDK4b5/+gbcK3AQwCMB/AnVR0HoA7A4xc+SVXnq2q2qmbHx/vPVtbZY5KRmdALz60+DDtH4UTG/W17MYpPnw2Iue9zXCnwYgDFqrq59fPlaCn0gBAcJHhoxmAcKT+D93aXmo5DFNCabA68+NkRjE2NxfSh/jNQ7Ei3C1xVTwAoEpGhrQ/NALDfLaks4trRSRiS2DIK53nhROa8va0IJVWBM/d9jqurUB4EsEREdgMYC+Bp1yNZR1CQ4CczhyCvog4rdvCuPUQmNDTb8fzqw7hoQG9c5ocnDjrjUoGr6s7W+e0xqvpNVT3trmBWcdWofhiTEoPnPj3Me2cSGbDoi3yU1TTisVlDA2r0DXAnpstEBI/NGoaSqrNYsqnQdByigFJ9thl/XHsU04fGY+LAvqbjeB0L3A2mDY7DlEF98dKaIzjTaDMdhyhgvLw+D9Vnm/Fv3xja8ZP9EAvcTR6dNRSVdU1Y8Pkx01GIAkJFbSMWbDyG2WOS/OpO813BAneTcWm98Y0RiZi/Pg+n6pqA6dNNRyLyay+tOYJGmwOPBOjoG2CBu9W/zRqK+iYb/rT2CLBunek4RH6r6FQ9lmwuwHeyU5ER97UN4AGDBe5GQxKj8KO+DZhx/60tD3AUTuQRf/j0EIKkZTNdIAsxHcCvTJ+OR88fea9bB4gAl10GrF1rLBaRP9lfWoO/7yjBvEsGol9MhOk4RnEETkSW8syHuYiOCMV90zNNRzGOBe5O7U2ZrFvH6RQiN1h/qAIbDp/Eg1dkIqZHqOk4xrHA3enJJ1umS4jI7ewOxdMf5CK1TyTunDzAdByfwAJ3N47CiTzi7ztKcOBELR6bNQzhIcGm4/gEFri7cRRO5HYNzXb87uODyEqNxewxSabj+AwWuCesXQsMaOO/eOvWAenp3k5DZHmvfn4Mx6sb8IurhwXcgVXOsMA9pb2iLihoGaUTUadUnmnEn9cexczhiQF5YJUzLHBPWbu2/akUrgkn6rTffXIIZ5vtePzqYaaj+BwWuAnr1nEUTtQJucdrsHRLIe6cPACZCb1Mx/E5LHBPam8uHABee82bSYgsR1XxX//Yj+jI0IDfMt8eFrinzZ3b9uMFBVxWSOTEx/vL8GVeJX565RDE9ggzHccnscA9jcsKibqs0WbH0x/kYnBCL9w2Ic10HJ/FAvcGbu4h6pKFG/NRUFmP/5g9AiHBrKn28DvjDU8+2f5ceH6+N5MQ+byK2ka8+NkRzBiWgEsD7C7zXcUC95b8/LZLvKCAm3uIzvObjw6godmOf792uOkoPo8F7k3c3EPk1LaC03h7WzHumZaBgfFcNtgRlwtcRIJFZIeIvOeOQH6NywqJ2mV3KP7z3b1IjA7Hg1w22CnuGIE/BCDXDa8TGLiskKhNb2wuwL7SGvzy2hHoFc6bhXWGSwUuIikArgXwinviBABe0CT6msozjfi/VQcxZVBfnjbYBa6OwJ8F8BgAR3tPEJF5IpIjIjkVFRUuvp2f4AVNoq/4zUcHUd9kx1PXj+Rpg13Q7QIXkdkAylV1m7Pnqep8Vc1W1ez4eC4J+ide0CQCAGwvPI1lOUW4e2o6BidGmY5jKa6MwKcCuF5E8gEsBXCFiCx2S6pAwAuaRLDZHf+8cPnQzCGm41hOtwtcVX+uqimqmg5gDoDPVPUOtyULBM4uaHIqhQLAoi8LsLeEFy67i+vATXJ2TgqnUsjPlVadxe8+PojpQ+N54bKb3FLgqrpWVWe747UCDqdSKEA9sXIfHKr47xtG8cJlN3EE7gt4QZMCzEd7T+CT/WX4ycwhSO3Tw3Qcy2KB+4K1a4GYmLa/9uyzXo1C5Gm1Dc14cuU+DOsXhe9NyzAdx9JY4L6iqqrtqZTqal7QJL/yu48Poay2Ac98azRCeVSsS/jd8yXOplK4zZ78wI7C01j0ZT7unDQA49J6m45jeSxwX+Lsgia32ZPFNdrseGz5bvSLjsCjs4aajuMXWOC+hmvDyU+9sPoIDpefwdPfGo2oiFDTcfwCC9zXcG04+aG9JdX407qjuGl8Ci4fmmA6jt9ggfsirkohP9Jsd+DR5bvRp2cY/mM277LjTixwX/Xww20/zlUpZDF/WnsUucdr8KtvjkJsjzDTcfwKC9xXOTs3nFMpZBEHT9Tihc8O47qsZMwa2c90HL/DAvdl7Z0bDnCbPfm8JpsDj7y9E1ERoXjyuhGm4/glFriv46oUsqgXPjuMvSU1ePrG0ejbK9x0HL/EAvd1nEohC9peeBovrTmCm8an4KpRnDrxFBa4FeTnc1UKWUZ9kw2PvLULSTGReOJ6Tp14EgvcKrgqhSzimQ8O4NjJOvz221mI5oYdj2KBW0VHUyk8K4V8wLpDFXh9UwHumZaByYP6mo7j91jgVuJsKmXTJq9GIbrQqbomPPr2LgxO6MWzTryEBW41VVVAeBtX9BsbgdhY7+chAqCqePTtXaiqb8azc8YiIjTYdKSAwAK3okmT2n6c8+FkyGtf5GP1gXL84pphGJnczv8Sye1Y4Fbk7NhZLi0kL9tXWo1nPjiAmcMTcNeUdNNxAgoL3Kry89ueSgGAX/3Kq1EocNU32fDgmzvQu2cofnNzFm9O7GUscCtraACC25hrtNs5H05e8eTKfTh2sg5/uGUs+vTkQVXexgK3upSUth+vrubSQvKod3aU4K2cYjxweSamDIozHScgdbvARSRVRNaISK6I7BORh9wZjDrJ2dLCdes4H04ecaisFj9fsQcTMvrgoRmDTccJWK6MwG0AHlHV4QAmAbhfRLhv1oT2lhYCnA8ntzvTaMMPF29Dz/AQvHjrOITwzvLGdPs7r6rHVXV768e1AHIB9HdXMOqixx9v+3HOh5MbqSp+tnw3Cirr8eJt45AQHWE6UkBzyz+dIpIOYByAze54PeoGZ/fS5PpwcpMFG/Px/p7jeHTWUEwayK3yprlc4CLSC8DfADysqjVtfH2eiOSISE5FRYWrb0fOOLuXJteHk4u2FZzCMx/k4soRifjBpQNNxyEAoqrd/8UioQDeA7BKVX/f0fOzs7M1Jyen2+9HnRQS0jJ10hYXfr8pcJ2obsB1L36OHmHBWPnANMRE8pRBbxKRbaqafeHjrqxCEQCvAsjtTHmTF9ls7X+NGy2oixqa7Zj3eg7qG214+bvZLG8f4soUylQAdwK4QkR2tv64xk25yFVPPNH+1yJ44Yk6R1Xx+N92Y09JNZ6dMw5DEqNMR6LzuLIK5XNVFVUdo6pjW3984M5w5AJn54c3NvKiJnXK/PV5eGdnKR65cgiuHJFoOg5dgAs4/ZmzTT68CQR1YM3Bcvz6owO4dkwS7r8803QcagML3N9VVbV9XgrAnZrUroMnavHjN3ZgeL9o/N/NY3hIlY9igQcCZxc1n3rKeznIEspqGnD3wi2IDAvGK3dlo0dYiOlI1A4WeKBwdlGToytqVddow/de24rqs81YMPdiJMdGmo5ETrDAA4WznZoAS5xgszvwwBvbceBELV68fTxG9eeddXwdCzyQrF3rvMRD+F/lQKWqeGLlPqw5WIH/umEkLh+aYDoSdQILPNCsXdv+yYU8+CpgvbTmCJZsLsQPLxuE2ye2s/yUfA4LPBC1dycfoOXgK5Z4QHl9UwF++/Eh3DiuPx6bNdR0HOoCFnigstnan/fm6YUB492dJfjPd/di5vAE/ObmMQgK4rUQK2GBBzKHo/2v8fRCv7fmQDkeeWsXJqT3wYu3jUcob8xgOfwdC3TOTid86imWuJ/amn8KP1y8DcOSovDKXdmICG1nSo18GgucWOIBZlvBKcxdsAX9e0di0d0TEBXB0wWtigVOLVjiAWFbwSl899UtSIyOwJv3TkLfXu2sSCJLYIHTv7DE/dq2glO4a8HWlvKeNwmJvJ+l5bHA6as6KnGeYGhJ58o7Piqc5e1HWOD0dc5KfN06LjG0mC+OnsR3X93SUt73srz9CQuc2uasxAsKuNnHIj7edwJzF25F/96RWDpvEvrFsLz9CQuc2uesxKurgSD+8fFly7cV40dLtmNEUjTe+sFkjrz9EE8vIudU29+xee5rvNO9z3n182P47/f2Y1pmHP5y50XoGc6/6v6Iv6vUMWclDrDEfYjDofjfjw7gL+vzcM3ofvjDLWMRHsJNOv6KBU6dwxL3efVNNvxk2U6s2leG704egCeuG4lgnm3i11jg1HmdKfEBA1pupkxeVVbTgO8vysHe0mo8cd0I3D01w3Qk8gIWOHVNRyVeUNByYwhn9+Ekt9pfWoN7FrXcBu3lO7Mxc0Si6UjkJSxw6rqOStxu55SKl7yzowSPr9iN2MgwvPWDybwNWoBxaR2YiFwlIgdF5IiIPO6uUGQBqu3f2eccEW768ZAmmwNPvLsXDy/biTH9Y7Hygaks7wDU7RG4iAQDeAnAlQCKAWwVkZWqut9d4cjHNTS0bOiprm7/OQUFLevFnZ09Tl1yvPos7l+yHdsLq/D9aRn42dXDeJZ3gHLld30CgCOqmqeqTQCWArjBPbHIMqqqnN8oGfjXlAsPw3LZ6twyzH7+85Y7x982Dr+cPYLlHcBc+Z3vD6DovM+LWx/7ChGZJyI5IpJTUVHhwtuRz1q7tnPz3U895XzunNp1tsmOX76zB/csykF8VDhWPjAVs8ckm45FhrlS4G39Tfza32JVna+q2aqaHR8f78Lbkc/r7EVLEZ5q2AV7iqtx7QsbsHhTIeZdOhDvPjAVmQlRpmORD3BlFUoxgNTzPk8BUOpaHLI8VSAiAmhsdP68deu4UqUDDc12/HHtUfxxzRHE9QrHG9+fiCmZcaZjkQ9xZQS+FcBgEckQkTAAcwCsdE8ssrSGBuCJJzr3XBFOq7RhU14lrnl+A55ffRizxyTho4cvYXnT13S7wFXVBuABAKsA5AJ4S1X3uSsYWdyTT3ZtdC3SMnIPcFX1TfjZ8t2YM38Tmu0O/PV7E/DsnHGI7RFmOhr5IJc28qjqBwA+cFMW8kednVIBWp4jAsTEtKxuCSBNNgcWbyrA858dRm2DDT+8bBAemjEYkWE8iIrax52Y5HkNDS0/d3aqpLq65bnBwX6/JV9VsWrfCfz6wwPIr6zHtMw4/Pu1wzE8Kdp0NLIAFjh5T1dG48C/tuSf+7V+RFWx8Uglnlt9CFvzT2NwQi8svPtiTB8SD+E1AeokFjh5V1dH4+f4SZGrKlbnluOFNUewq6gKidHh+J8bR+GW7FSEcEMOdRELnMxQbTknpaCga7/u/OK3UJk3NNvxj12lePXzYzhwohapfSLx9I2jcdNF/XnDBeo2FjiZc+7c8KCg7pWxBcr8aMUZLNlUiOXbilDTYENmQi/8/jtZuD4rmSNuchkLnMw7d9CVK3O/F/5ag4VeXtOAD/eewPu7j2NL/imEBgtmjeyHOyYNwMSMPpzjJrdhgZPvOFe67ig4ZzdidjNVxdGKOmw4XIEP957A1vxTUAWGJPbCo7OG4jvZqYiP6uDoXaJuYIGT73FnkV/I2Wt2stztDsWxk2ewo7AKXxytxBdHT6KspmVlzZDEXnhoxmBcOzoJgxN5Xgl5FgucfJcni7wDdoeiorYRpdVncaK6AaVVZ3G04gz2l9bgYFktGppbpn369gzD5EF9MWVQHKYM6ov0uJ5ez0qBiwVOvu/8kbEHy3zyM6vR0GxHQ7MDDTb71wbksT1CMSIpGrdPHIARSdEY1T8GgxN6IYh3fidDWOBkLedatbsrV5z48hczW94CwB8+PoiEqHAkx0agX3QkkmMjEBMZyguQ5FNY4GRN59+irTvrydvS+g+CAPip669G5HFciErWl5/fUr7nfgRzYwwFBo7Ayf+0dwAWpz/Iz7DAKXD46G5Nou7iFAoRkUWxwImILIoFTkRkUSxwIiKLYoETEVmUqBevzItIBYDu7riIA3DSjXE8zUp5mdVzrJTXSlkBa+V1NesAVY2/8EGvFrgrRCRHVbNN5+gsK+VlVs+xUl4rZQWslddTWTmFQkRkUSxwIiKLslKBzzcdoIuslJdZPcdKea2UFbBWXo9ktcwcOBERfZWVRuBERHQeFjgRkUVZqt1oGMUAAAM7SURBVMBF5Nsisk9EHCLik8uHROQqETkoIkdE5HHTeZwRkQUiUi4ie01n6YiIpIrIGhHJbf0z8JDpTM6ISISIbBGRXa15nzKdqSMiEiwiO0TkPdNZOiIi+SKyR0R2ikiO6TzOiEisiCwXkQOtf34nu+u1LVXgAPYC+BaA9aaDtEVEggG8BOBqACMA3CoiI8ymcuo1AFeZDtFJNgCPqOpwAJMA3O/j39tGAFeoahaAsQCuEpFJhjN15CEAuaZDdMHlqjrWAmvBnwPwkaoOA5AFN36PLVXgqpqrqgdN53BiAoAjqpqnqk0AlgK4wXCmdqnqegCnTOfoDFU9rqrbWz+uRctfgv5mU7VPW5xp/TS09YfPrhgQkRQA1wJ4xXQWfyIi0QAuBfAqAKhqk6pWuev1LVXgFtAfQNF5nxfDh0vGqkQkHcA4AJvNJnGudUpiJ4ByAJ+oqi/nfRbAYwAcHT3RRyiAj0Vkm4jMMx3GiYEAKgAsbJ2eekVEerrrxX2uwEXkUxHZ28YPnx3Jnqete3b57KjLikSkF4C/AXhYVWtM53FGVe2qOhZACoAJIjLKdKa2iMhsAOWqus10li6Yqqrj0TJdeb+IXGo6UDtCAIwH8CdVHQegDoDbro353C3VVHWm6QwuKAaQet7nKQBKDWXxOyISipbyXqKqK0zn6SxVrRKRtWi53uCLF4ynArheRK4BEAEgWkQWq+odhnO1S1VLW38uF5G/o2X60hevjRUDKD7vf1/L4cYC97kRuMVtBTBYRDJEJAzAHAArDWfyCyIiaJlHzFXV35vO0xERiReR2NaPIwHMBHDAbKq2qerPVTVFVdPR8mf2M18ubxHpKSJR5z4G8A345j+MUNUTAIpEZGjrQzMA7HfX61uqwEXkRhEpBjAZwPsissp0pvOpqg3AAwBWoeUi21uqus9sqvaJyJsAvgQwVESKReQe05mcmArgTgBXtC4d29k6YvRVSQDWiMhutPzD/omq+vzyPItIBPC5iOwCsAXA+6r6keFMzjwIYEnrn4WxAJ521wtzKz0RkUVZagRORET/wgInIrIoFjgRkUWxwImILIoFTkRkUSxwIiKLYoETEVnU/wOqqHAa76Z9xAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "eta = 0.001 # 分别自己试试0.1、0.01、0.001；0.8、、\n",
    "gradient_descent(0.,eta)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "ename": "KeyboardInterrupt",
     "evalue": "",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mKeyboardInterrupt\u001b[0m                         Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-17-a5a013c91ebf>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m      1\u001b[0m \u001b[0meta\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m1.1\u001b[0m \u001b[1;31m# 分别自己试试0.1、0.01、0.001；0.8；1.1的时候越蹦越高，收敛不了了\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mgradient_descent\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m0.\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0meta\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[1;32m<ipython-input-11-4d85a018f029>\u001b[0m in \u001b[0;36mgradient_descent\u001b[1;34m(initial_theta, eta, epsilon)\u001b[0m\n\u001b[0;32m     13\u001b[0m         \u001b[1;31m# print(theta)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     14\u001b[0m         \u001b[1;31m# 比较差值是否越来越小.当变换接近于最小经度时，已经可以人为到达导数为0的点了\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 15\u001b[1;33m         \u001b[1;32mif\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mabs\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mJ\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mtheta\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m-\u001b[0m \u001b[0mJ\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mlast_theta\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m<\u001b[0m \u001b[0mepsilon\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m     16\u001b[0m             \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"累计查找的次数：\"\u001b[0m\u001b[1;33m+\u001b[0m\u001b[0mstr\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mtheta_history\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     17\u001b[0m             \u001b[0mplot_theta_history\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mtheta_history\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32m<ipython-input-6-8af0a5301bc9>\u001b[0m in \u001b[0;36mJ\u001b[1;34m(theta)\u001b[0m\n\u001b[0;32m      1\u001b[0m \u001b[1;31m# theta对应的损失函数\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[1;32mdef\u001b[0m \u001b[0mJ\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mtheta\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m      3\u001b[0m     \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      4\u001b[0m         \u001b[1;32mreturn\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mtheta\u001b[0m \u001b[1;33m-\u001b[0m \u001b[1;36m2.5\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m**\u001b[0m\u001b[1;36m2\u001b[0m \u001b[1;33m-\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      5\u001b[0m     \u001b[1;32mexcept\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mKeyboardInterrupt\u001b[0m: "
     ]
    }
   ],
   "source": [
    "eta = 1.1 # 分别自己试试0.1、0.01、0.001；0.8；1.1的时候越蹦越高，收敛不了了\n",
    "gradient_descent(0.,eta)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "def gradient_descent(initial_theta,eta,epsilon=1e-8,max_iters=10000): # max_iters:最大循环次数，防止无法首先时陷入死循环\n",
    "    theta = initial_theta\n",
    "    theta_history = [initial_theta]\n",
    "    for i in range(0, max_iters): # 只梯度下降指定的次数，这样就不会出现上面死循环的情况了\n",
    "        gradient = dJ(theta)\n",
    "        last_theta = theta \n",
    "        theta = theta - eta * gradient\n",
    "        # 把每次的theta存储到数组中，方便下面进行绘图\n",
    "        theta_history.append(theta)\n",
    "        # 比较差值是否越来越小.当变换接近于最小经度时，已经可以人为到达导数为0的点了\n",
    "        if(abs(J(theta) - J(last_theta)) < epsilon):\n",
    "            print(\"累计查找的次数：\"+str(len(theta_history)))\n",
    "            plot_theta_history(theta_history)\n",
    "            break\n",
    "        if i==max_iters-1: # 一旦到达最大梯度下降的次数就直接绘图，不再继续梯度下降下去了\n",
    "            plot_theta_history(theta_history)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "eta = 1.1 # 分别自己试试0.1、0.01、0.001；0.8；1.1的时候越蹦越高，收敛不了了,所以不会打印出图,这里指定迭代的最大次数\n",
    "gradient_descent(0.,eta,max_iters=100)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "eta = 1.1 # 分别自己试试0.1、0.01、0.001；0.8；1.1的时候越蹦越高，收敛不了了,所以不会打印出图，这里指定迭代的最大次数\n",
    "gradient_descent(0.,eta,max_iters=10) # 梯度下降次数少地时候还是可以看到最开始的损失函数J曲线地"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
